home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / oleo130s.zip / OLEO130S.TAR / oleo-1.3 / format.c < prev    next >
C/C++ Source or Header  |  1993-03-30  |  5KB  |  247 lines

  1. /*    Copyright (C) 1993 Free Software Foundation, Inc.
  2.  
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2, or (at your option)
  6. any later version.
  7.  
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. GNU General Public License for more details.
  12.  
  13. You should have received a copy of the GNU General Public License
  14. along with this software; see the file COPYING.  If not, write to
  15. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  16.  
  17. #include "global.h"
  18. #include "format.h"
  19. #include "line.h"
  20. #include "cell.h"
  21. #include "cmd.h"
  22. #include "io-term.h"
  23. #include "io-abstract.h"
  24. #include "io-generic.h"
  25.  
  26.  
  27.  
  28.  
  29. #ifdef __STDC__
  30. char *
  31. fmt_to_str (int fmt)
  32. #else
  33. char *
  34. fmt_to_str (fmt)
  35.      int fmt;
  36. #endif
  37. {
  38.   char *ptr;
  39.   static char buf[30];
  40.   char nbuf[10];
  41.  
  42.   if (fmt == FMT_DEF)
  43.     return "default";
  44.   if (fmt == FMT_HID)
  45.     return "hidden";
  46.   if (fmt == FMT_GPH)
  47.     return "graph";
  48.   if ((fmt & PRC_FLT) == PRC_FLT)
  49.     strcpy (nbuf, "float");
  50.   else
  51.     sprintf (nbuf, "%d", (fmt & PRC_FLT));
  52.   switch (fmt | PRC_FLT)
  53.     {
  54.     case FMT_USR:
  55.       ptr = "user-";
  56.       sprintf (nbuf, "%d", (fmt & PRC_FLT) + 1);
  57.       break;
  58.     case FMT_GEN:
  59.       ptr = "general.";
  60.       break;
  61.     case FMT_DOL:
  62.       ptr = "dollar.";
  63.       break;
  64.     case FMT_CMA:
  65.       ptr = "comma.";
  66.       break;
  67.     case FMT_PCT:
  68.       ptr = "percent.";
  69.       break;
  70.     case FMT_FXT:
  71.       if ((fmt & PRC_FLT) == 0)
  72.     return "integer";
  73.       if (fmt == FMT_FXT)
  74.     return "decimal";
  75.       ptr = "fixed.";
  76.       break;
  77.     case FMT_EXP:
  78.       ptr = "exponent.";
  79.       break;
  80.     default:
  81.       io_error_msg ("Unknown format %d (%x)", fmt, fmt);
  82.       ptr = "UNKNOWN";
  83.       break;
  84.     }
  85.   sprintf (buf, "%s%s", ptr, nbuf);
  86.   return buf;
  87. }
  88.  
  89. struct fmt
  90. {
  91.   int fmt;
  92.   char **strs;
  93. };
  94.  
  95. static char *def_names[] =
  96. {"default", "def", "D", 0};
  97. static char *hid_names[] =
  98. {"hidden", "hid", "H", 0};
  99. static char *gph_names[] =
  100. {"graph", "gph", "*", 0};
  101. static char *int_names[] =
  102. {"integer", "int", "I", 0};
  103. static char *dec_names[] =
  104. {"decimal", "dec", 0};
  105.  
  106. static struct fmt simple[] =
  107. {
  108.   {FMT_DEF, def_names},
  109.   {FMT_HID, hid_names},
  110.   {FMT_GPH, gph_names},
  111.   {FMT_FXT - PRC_FLT, int_names},
  112.   {FMT_FXT, dec_names},
  113.   {0, 0}
  114. };
  115.  
  116. char *gen_names[] =
  117. {"general.", "gen.", "G", 0};
  118. char *dol_names[] =
  119. {"dollar.", "dol.", "$", 0};
  120. char *cma_names[] =
  121. {"comma.", "com.", ",", 0};
  122. char *pct_names[] =
  123. {"percent.", "pct.", "%", 0};
  124. char *fxt_names[] =
  125. {"fixed.", "fxt.", "F", 0};
  126. char *exp_names[] =
  127. {"exponent.", "exp.", "E", 0};
  128.  
  129. static struct fmt withprec[] =
  130. {
  131.   {FMT_GEN - PRC_FLT, gen_names},
  132.   {FMT_DOL - PRC_FLT, dol_names},
  133.   {FMT_CMA - PRC_FLT, cma_names},
  134.   {FMT_PCT - PRC_FLT, pct_names},
  135.   {FMT_FXT - PRC_FLT, fxt_names},
  136.   {FMT_EXP - PRC_FLT, exp_names},
  137.   {0, 0}
  138. };
  139.  
  140. #ifdef __STDC__
  141. int
  142. str_to_fmt (char *ptr)
  143. #else
  144. int
  145. str_to_fmt (ptr)
  146.      char *ptr;
  147. #endif
  148. {
  149.   struct fmt *f;
  150.   char **strs;
  151.   int n;
  152.   int ret;
  153.   char *p1, *p2;
  154.  
  155.   for (f = simple; f->strs; f++)
  156.     {
  157.       for (strs = f->strs; *strs; strs++)
  158.     {
  159.       if (*ptr != **strs)
  160.         continue;
  161.       for (p1 = ptr, p2 = *strs; *p1 == *p2 && *p1; p1++, p2++)
  162.         ;
  163.       if (*p1 == '\0' && *p2 == '\0')
  164.         return f->fmt;
  165.     }
  166.     }
  167.   if (!strncmp (ptr, "user-", 5))
  168.     {
  169.       ptr += 5;
  170.       n = astol (&ptr);
  171.       if (*ptr || n < 1 || n > 16)
  172.     return -1;
  173.       return n - 1 - PRC_FLT + FMT_USR;
  174.     }
  175.   for (f = withprec, ret = 0; !ret && f->strs; f++)
  176.     {
  177.       for (strs = f->strs; *strs; strs++)
  178.     {
  179.       if (*ptr != **strs)
  180.         continue;
  181.       for (p1 = ptr, p2 = *strs; *p2 && *p1 == *p2; p1++, p2++)
  182.         ;
  183.       if (!*p2)
  184.         {
  185.           ret = f->fmt;
  186.           ptr = p1;
  187.           break;
  188.         }
  189.     }
  190.     }
  191.  
  192.   if (!ret || !*ptr)
  193.     return -1;
  194.   if (!strcmp (ptr, "float") || !strcmp (ptr, "f"))
  195.     {
  196.       n = PRC_FLT;
  197.     }
  198.   else
  199.     {
  200.       n = astol (&ptr);
  201.       if (*ptr || n < 0 || n > 14)
  202.     return -1;
  203.     }
  204.   return ret + n;
  205. }
  206.  
  207. #ifdef __STDC__
  208. char *
  209. jst_to_str (int jst)
  210. #else
  211. char *
  212. jst_to_str (jst)
  213.      int jst;
  214. #endif
  215. {
  216.   if (jst == JST_DEF)
  217.     return "default";
  218.   if (jst == JST_LFT)
  219.     return "left";
  220.   if (jst == JST_RGT)
  221.     return "right";
  222.   if (jst == JST_CNT)
  223.     return "center";
  224.   return "unknown";
  225. }
  226.  
  227. #ifdef __STDC__
  228. int
  229. chr_to_jst (int chr)
  230. #else
  231. int
  232. chr_to_jst (chr)
  233.      int chr;
  234. #endif
  235. {
  236.   if (chr == 'd' || chr == 'D')
  237.     return JST_DEF;
  238.   if (chr == 'l' || chr == 'L')
  239.     return JST_LFT;
  240.   if (chr == 'r' || chr == 'R')
  241.     return JST_RGT;
  242.   if (chr == 'c' || chr == 'C')
  243.     return JST_CNT;
  244.   return -1;
  245. }
  246.  
  247.